# 根据设置的Name标示查找组件的对象，关键函数:setObjectName()/findChild()
# findChild()/2:需要两个参数。参数一:组件的类型,如QLineEdit、QPushButton。参数二:setObjectName()设置的Name标示。
# 建立各个组件的Name标示和组件的类型的映射关系，则可直接通过findChild(map_nameId_type,nameId)找到组件。

from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QHBoxLayout, QLineEdit)
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys


def clickHandle():
    # button = main.sender()
    # print(button.objectName())

    array = []
    array.append(QLineEdit)
    # 根据名字获取组件
    obj = main.findChild(array[0],
                         "edit_1")  # findChild()/2:需要两个参数。参数一:组件的类型,如QLineEdit、QPushButton。参数二:setObjectName()设置的Name标示。
    print(type(obj))
    print(isinstance(obj, QLineEdit))
    print(isinstance(obj, array[0]))

    print(main.findChild(array[0], "edit_1").text())

    print(main.findChild(QLineEdit, "edit_2").text())
    print(edit_1.text())
    print(array_obj[2].text())
    print(array_obj[3].text())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QWidget()

    array_obj = []
    latout = QHBoxLayout()
    main.setLayout(latout)

    but_1 = QPushButton('but_1')
    but_1.setObjectName('but_1')
    but_1.clicked.connect(clickHandle)
    but_2 = QPushButton('but_2')
    but_2.setObjectName('but_2')
    but_2.clicked.connect(clickHandle)

    array_obj.append(but_1)
    array_obj.append(but_2)

    edit_1 = QLineEdit()
    edit_1.setObjectName('edit_1')

    edit_2 = QLineEdit()
    edit_2.setObjectName('edit_2')

    array_obj.append(edit_1)
    array_obj.append(edit_2)

    latout.addWidget(but_1)
    latout.addWidget(but_2)

    latout.addWidget(edit_1)
    latout.addWidget(edit_2)

    main.show()
    app.exec_()
